home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Network Support Library
/
RoseWare - Network Support Library.iso
/
apidev
/
ipxdem.arc
/
IPXDEMOR.ASM
next >
Wrap
Assembly Source File
|
1986-09-01
|
4KB
|
118 lines
; IPXDEMOR.ASM --- SOURCE TO IPXDEMOR.COM
; (ALSO NEEDS IPXDEMOS.ASM --- IPXDEMOS.COM)
;
; THIS PROGRAM IS A VERY SIMPLE DEMONSTRATION OF THE USE
; OF THE NOVELL IPX ROUTINES. IN THIS PROGRAM WE WILL DO
; 4 THINGS:
;
; 1: WE WILL OPEN AN IPX SOCKET
;
; 2: WE WILL SET UP AN IPX EVENT CONTROL BLOCK TO
; RECEIVE ANYTHING THAT COMES IN ON OUR SOCKET
;
; 3: WE WILL LEAVE A PORTION OF OUR PROGRAM RESIDENT
; WAITING FOR A PACKET TO BE SENT TO US
;
; 4: WHEN AND IF WE RECEIVE A PACKET ON OUR SOCKET
; WE WILL REBOOT THE COMPUTER
;
;
; IN SHORT, THIS PROGRAM WILL WAIT FOR SOMEONE ON THE NETWORK
; TO SEND IN DATA ON OUR SOCKET, AND WHEN THAT HAPPENS OUR
; COMPUTER WILL REBOOT. IF THIS PROGRAM WERE LOADED ON EVERY
; MACHINE IN THE NETWORK, AND THE MATHING PROGRAM THAT SENDS
; THE PACKETS OUT WERE IN THE SUPERVISOR'S DIRECTORY, THEN ANY
; TIME THE SUPERVISOR NEEDED TO HE COULD CAUSE EVERY COMPUTER
; ON THE NET TO BE RESET.
;
; THE USEFULLNESS OF THIS PROGRAM IS PROBABLY VERY LIMITED DUE
; TO THE POSSIBILITY OF MAJOR LOSS OF DATA IF A RESET WERE TO
; OCCUR AT A CRUCIAL TIME. THIS PROGRAM IS MEANT ONLY AS AN
; EXAMPLE OF IPX AND HOW EASY A SIMPLE APPLICATION IS TO
; DEVELOP.
;
; CLAY JONES
; (DEVELOPER OF HOT PRINT)
CSEG SEGMENT PARA PUBLIC 'code'
ORG 100h
ASSUME CS:CSEG, DS:CSEG
ENTRY PROC NEAR ; THE ENTRY POINT OF THE PROGRAM
JMP GO ; JUMP AROUND RESIDENT PORTION TO LOAD
RST_SOC EQU 9997h ; THIS IS THE IPX SOCKET WE'LL RESIDE AT
;------ THIS IS AN IPX EVENT CONTROL BLOCK (ECB) IT IS USED
; TO SCHEDULE AN IPX EVENT. WE WILL USE IT TO LISTEN
; FOR A PACKET TO BE SENT TO US AND CALL OUR 'RCVD'
; ROUTINE TO RESET THE COMPUTER
ECB1 DD 0 ; THESE 4 BYTES ARE USED BY IPX TO LINK
ADDR1 DD 0 ; WE'LL PUT OUR RESET POINTER HERE
INUSE1 DB 0 ; IN USE FLAGS IF WE WANTED TO CHECK STATUS
COMPL1 DB 0 ; COMPLETION ERROR CODES GO IN HERE
SOCKT1 DW RST_SOC ; THE SOCKET WE WILL BE LISTENING TO
WK1 DB 16 DUP(0) ; WORK SPACE FOR IPX
IMADR1 DB 6 DUP (0) ; THE ADDRESS OF THE STATION SENDING TO US
FRG1 DW 1 ; THE NUMBER OF FRAGMENTS WE HAVE (1)
AD1A DD 0 ; THE ADDRESS OF THE 1 FRAGMENT WE HAVE
SIZ1A DB 36,0 ; THE SIZE OF OUR FRAGMENT
;------ THIS IS THE HEADER OF THE IPX PACKET WE WILL RECEIVE
CHSUM1 DB 0,0 ; THIS IS A CHECKSUM OF THE HEADER PACKET
LEN1 DB 0,0 ; THIS IS THE TOTAL LENGTH OF THE PACKET
TC1 DB 0 ; "TRANSPORT CONTROL BYTE" USED BY IPX
PT1 DB 0 ; "PACKET TYPE"
DST1 DB 12 DUP(0) ; WILL BE OUR OWN ADDRESS
SRC1 DB 12 DUP(0) ; ADDRESS OF SOURCE STATION SENDING
RCVBFR DB 50 DUP(0) ; A BLANK BUFFER IN CASE WE EVER NEED IT
;------ THIS ROUTINE WILL BE CALLED BY IPX WHENEVER A PACKET IS
; RECEIVED ON OUR SOCKET. IT WILL CAUSE THE COMPUTER TO
; EXECUTE A WARM BOOT.
RCVD PROC FAR
XOR AX,AX ; CLEAR THE AX REGISTER TO 0
MOV DS,AX ; AND SET THE DATA SEGMENT TO SEGMENT 0
MOV BX,472h ; TO WARM BOOT WE NEED TO PUT INTO 0:472
MOV WORD PTR [BX],1234h ; THE VALUE 1234h
MOV AX,0FFFFh ; NEXT WE SET AX TO SEGMENT FFFF
PUSH AX ; AND PUSH IT ONTO THE STACK
PUSH DS ; NOW PUSH 0 ONTO THE STACK
RET ; NEXT DO A FAR RETURN TO FFFF:0 TO REBOOT
RCVD ENDP
;------ THIS PORTION OF THE PROGRAM
; 1: OPENS THE SOCKET
; 2: SET UP THE IPX ECB
; 3: EXITS LEAVING THE ECB AND RCVD RESIDENT
GO: MOV BX,0 ; SET BX TO 0 MEAN OPEN SOCKET TO IPX
MOV DX,RST_SOC ; WE WANT TO OPEN A SPECIFIC SOCKET
MOV AL,0FFh ; WE WANT IT TO STAY OPEN PERMANENTLY
INT 7Ah ; INT 7A CALLS IPX
PUSH DS ; IPX CHANGES THE ES REGISTER SO WE RESET IT
POP ES ; .. TO EQUAL THE DS REGISTER
MOV AX,DS ; PUT DS INTO AX SO WE CAN SET UP THE ECB
MOV WORD PTR AD1A+2,AX ; PUT DS IN SEGMENT ADDRESS
MOV WORD PTR AD1A,OFFSET CHSUM1 ; SET OFFSET OF SEGMENT
MOV WORD PTR ADDR1+2,AX ; PUT DS INTO EVENT SRVC RTN
MOV WORD PTR ADDR1,OFFSET RCVD ; PUT OFFSET OF SERVICE ROUTINE
LEA SI,ECB1 ; PUT ADDRESS OF THE ECB INTO SI REGISTER
MOV BX,4 ; BX = 4 MEANS LISTEN FOR PACKET
INT 7Ah ; INT 7A CALLS IPX
MOV DX,OFFSET GO ; SET THE NUMBER OF BYTES TO LEAVE RESIDENT
INT 27h ; TERMINATE BUT LEAVE PART OF PROGRAM RESIDENT
ENTRY ENDP
CSEG ENDS
END ENTRY